Completed
Push — master ( 40c2b4...09bd06 )
by Justin
01:29
created

Fact.setDate   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6

Duplication

Lines 6
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
nc 2
nop 1
dl 6
loc 6
rs 9.4285
1 View Code Duplication
var Conclusion = require('./Conclusion'),
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
2
    PlaceReference = require('./PlaceReference'),
3
    GDate = require('./Date'),
4
    Qualifier = require('./Qualifier'),
5
    utils = require('./utils');
6
7
/**
8
 * A fact for a person or relationship.
9
 * 
10
 * @constructor
11
 * @param {Object} [json]
0 ignored issues
show
Documentation introduced by
The parameter [json] does not exist. Did you maybe forget to remove this comment?
Loading history...
12
 */
13
var Fact = function(json){
14
  
15
  // Protect against forgetting the new keyword when calling the constructor
16
  if(!(this instanceof Fact)){
17
    return new Fact(json);
18
  }
19
  
20
  // If the given object is already an instance then just return it. DON'T copy it.
21
  if(Fact.isInstance(json)){
22
    return json;
23
  }
24
  
25
  Conclusion.call(this, json);
26
  
27
  if(json){
0 ignored issues
show
Complexity Best Practice introduced by
There is no return statement if json is false. Are you sure this is correct? If so, consider adding return; explicitly.

This check looks for functions where a return statement is found in some execution paths, but not in all.

Consider this little piece of code

function isBig(a) {
    if (a > 5000) {
        return "yes";
    }
}

console.log(isBig(5001)); //returns yes
console.log(isBig(42)); //returns undefined

The function isBig will only return a specific value when its parameter is bigger than 5000. In any other case, it will implicitly return undefined.

This behaviour may not be what you had intended. In any case, you can add a return undefined to the other execution path to make the return value explicit.

Loading history...
28
    this.setType(json.type);
29
    this.setDate(json.date);
30
    this.setPlace(json.place);
31
    this.setValue(json.value);
32
    this.setQualifiers(json.qualifiers);
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
33
  }
34
};
35
36
Fact.prototype = Object.create(Conclusion.prototype);
37
38
Fact._gedxClass = Fact.prototype._gedxClass = 'GedcomX.Fact';
39
40
/**
41
 * Check whether the given object is an instance of this class.
42
 * 
43
 * @param {Object} obj
44
 * @returns {Boolean}
45
 */
46
Fact.isInstance = function(obj){
47
  return utils.isInstance(obj, this._gedxClass);
48
};
49
50
/**
51
 * Get the fact type
52
 * 
53
 * @returns {String} type
54
 */
55
Fact.prototype.getType = function(){
56
  return this.type;
57
};
58
59
/**
60
 * Set the fact type
61
 * 
62
 * @param {String} type
63
 * @returns {Fact} This instance
64
 */
65
Fact.prototype.setType = function(type){
66
  this.type = type;
67
  return this;
68
};
69
70
/**
71
 * Get the date
72
 * 
73
 * @returns {Date} date
74
 */
75
Fact.prototype.getDate = function(){
76
  return this.date;
77
};
78
79
/**
80
 * Set the date
81
 * 
82
 * @param {Date|Object} date
83
 * @returns {Fact} This instance
84
 */
85
Fact.prototype.setDate = function(date){
86
  if(date){
87
    this.date = GDate(date);
88
  }
89
  return this;
90
};
91
92
/**
93
 * Get the place reference
94
 * 
95
 * @returns {PlaceReference}
96
 */
97
Fact.prototype.getPlace = function(){
98
  return this.place;
99
};
100
101
/**
102
 * Set the place reference
103
 *
104
 * @param {PlaceReference|Object} place
105
 * @returns {Fact} This instance
106
 */
107
Fact.prototype.setPlace = function(place){
108
  if(place){
109
    this.place = PlaceReference(place);
110
  }
111
  return this;
112
};
113
114
/**
115
 * Get the value
116
 * 
117
 * @returns {String}
118
 */
119
Fact.prototype.getValue = function(){
120
  return this.value;
121
};
122
123
/**
124
 * Set the value
125
 * 
126
 * @param {String} value
127
 * @returns {Fact} This instance
128
 */
129
Fact.prototype.setValue = function(value){
130
  this.value = value;
131
  return this;
132
};
133
134
/**
135
 * Get qualifiers
136
 * 
137
 * @return {Qualifer[]}
138
 */
139
Fact.prototype.getQualifiers = function(){
140
  return this.qualifiers || [];
141
};
142
143
/**
144
 * Set the qualifiers
145
 * 
146
 * @param {Qualifer[]|Object[]} qualifiers
147
 * @returns {Fact} This instance
148
 */
149
Fact.prototype.setQualifiers = function(qualifiers){
150
  return this._setArray(qualifiers, 'qualifiers', 'addQualifier');
151
};
152
153
/**
154
 * Add a qualifier
155
 * 
156
 * @param {Qualifier|Object} qualifier
157
 * @returns {Fact} This instance
158
 */
159
Fact.prototype.addQualifier = function(qualifier){
160
  return this._arrayPush(qualifier, 'qualifiers', Qualifier);
161
};
162
163
/**
164
 * Export the object as JSON
165
 * 
166
 * @return {Object} JSON object
167
 */
168
Fact.prototype.toJSON = function(){
169
  return this._toJSON(Conclusion, [
170
    'type',
171
    'date',
172
    'place',
173
    'value',
174
    'qualifiers'
175
  ]);
176
};
177
178
module.exports = Fact;